package com.lancer.volatileTest;


import java.util.concurrent.TimeUnit;

public class ViewableDemo1 {

    public static void main(String[] args) {
       MyData myData = new MyData();
       new Thread(() -> {
           System.out.println(Thread.currentThread().getName() + " come in ...");
           try {
               TimeUnit.SECONDS.sleep(1);
           } catch (InterruptedException e) {
               e.printStackTrace();
           }

           myData.add();

           System.out.println(Thread.currentThread().getName() + " update number value to:" + myData.number2);
       },"AA").start();

        // 此处，如果循环判断的时number1,没有加volatile修饰，就会一直死循环下去，
        // 但是如果没有这个循环，等待2s之后直接获取，则能获取到线程A改变后的值，因为，主线程，是在线程A修改之后才拿到的数据；
       while(myData.number2 == 0){
           // 如果数字一直没变就死循环
       }
        System.out.println(Thread.currentThread().getName() + " get value " + myData.number2);
    }

}
